import {
    SET_FULL_SCREEN,
    SET_MINI_PLAYER,
    SET_LIST_PLAYER,
    SET_IS_PLAYING,
    SET_MODE_TYPE,
    SET_SONG_DETAIL,
    SET_SONG_LYRIC,
    SET_DEL_SONG,
    SET_CURRENT_SONG,
    SET_CUR_TIME,
    SET_FAVORITE_SONG,
    SET_FAVORITE_LIST,
    SET_HISTORY_SONG,
    SET_HISTORY_LIST
} from "./mutations-type"
// 引入接口方法
import { getSongDetail, getLyric, getSongURL } from '../api/index'
// import * as getSongLyric from '../api/index'
export default {
    setFullScreent({ commit }, flag) {
        commit(SET_FULL_SCREEN, flag)
    },
    setMiniPlayer({ commit }, flag) {
        commit(SET_MINI_PLAYER, flag)
    },
    setListPlayer({ commit }, flag) {
        commit(SET_LIST_PLAYER, flag)
    },
    setIsPlaying({ commit }, flag) {
        commit(SET_IS_PLAYING, flag)
    },
    setModeType({ commit }, flag) {
        commit(SET_MODE_TYPE, flag)
    },
    // 发送请求异步操作
    async setSongDetail({ commit }, ids) {
        //获取歌曲详情
        let result = await getSongDetail({ ids: ids.join(",") })
        let urls = await getSongURL({ id: ids.join(",") })
        // console.log(result);
        // console.log(urls);
        // 遍历result保存
        let list = []
        result.songs.forEach((item, i) => {
            //每一次item都等于歌曲详情里的第一层属性
            let obj = {}//创建空对象接收歌曲详情
            // obj.url = urls.data[i].url
            // 解决歌曲和歌词不对版的问题
            for (let j = 0; j < urls.data.length; j++) {
                if (item.id === urls.data[j].id) {
                    obj.url = urls.data[j].url
                    break
                }
            }
            obj.name = item.name // 歌曲名
            let singer = '' // 歌手名字
            // console.log(item);
            item.ar.forEach((val, index) => {
                if (index === 0) {
                    singer = val.name
                } else {
                    singer += '-' + val.name
                }
            })
            //判断歌曲详情内是否有id这个属性，有的话就赋值到obj里面
            if (item.hasOwnProperty('id')) {
                // console.log("有id");
                obj.id = item.id
            }
            obj.singer = singer
            obj.picUrl = item.al.picUrl
            //把新生成的歌曲对象写入数组中
            list.push(obj)
        })
        //把上面处理好的数组写入state.js里的songs数组内
        commit(SET_SONG_DETAIL, list)
    },
    async getSongLyric({ commit }, id) {
        //接收NormalPlayer中watch下传递的id，通过id获取歌词
        let result = await getLyric({ id: id })
        // console.log(result.lrc.lyric);
        let obj = _formatLyr(result.lrc.lyric)
        // console.log(obj);
        // 将obj数据写入到currentLyric中
        commit(SET_SONG_LYRIC, obj)
    },
    setDelSong({ commit }, index) {
        commit(SET_DEL_SONG, index)
    },
    setCurrentIndex({ commit }, index) {
        commit(SET_CURRENT_SONG, index)
    },
    setCurTime({ commit }, time) {
        commit(SET_CUR_TIME, time)
    },
    setFavoriteSong({ commit }, song) {
        commit(SET_FAVORITE_SONG, song)
    },
    setFavoriteList({ commit }, list) {
        commit(SET_FAVORITE_LIST, list)
    },
    setHistorySong({ commit }, song) {
        commit(SET_HISTORY_SONG, song)
    },
    setHistoryList({ commit }, list) {
        commit(SET_HISTORY_LIST, list)
    },
}

// 格式化歌词方法
// function parseLyric(lrc) {
//     let lyrics = lrc.split('\n')
//     // [00.00.000] 作曲 : 林俊杰
//     // 1.定义正则表达式提取[00.00.000]
//     let reg1 = /\[\d*:\d*\.\d*\]/g
//     // 2.定义正则表达式提取 [00
//     let reg2 = /\[d*/i
//     // 3. 定义正则表达式提取 :00
//     let reg3 = /\:\d*/i
//     // 4.定义对象保存处理好的歌词
//     let lyricObj = {}
//     lyrics.forEach(function (lyric) {
//         // 1.提取时间
//         /*
//         match() 方法可在字符串内检索指定的值，或找到一个或多个正则表达式的匹配。

//         该方法类似 indexOf() 和 lastIndexOf()，但是它返回指定的值，而不是字符串的位置。
//         * */
//         let timeStr = lyric.match(reg1)
//         if (!timeStr) { return }
//         timeStr = timeStr[0]
//         // console.log(timeStr);
//         // 2.提取分钟
//         let minStr = timeStr.match(reg2)[0].substr(1)
//         console.log(minStr);
//         // 3.提取秒钟
//         let secondStr = timeStr.match(reg3)[0].substr(1)
//         // 4.合并时间，将分钟和秒钟都合并为秒钟
//         let time = parseInt(minStr) * 60 + parseInt(secondStr)
//         console.log(time);
//         // 5.处理歌词
//         let text = lyric.replace(reg1, '').trim()
//         console.log(text);
//         // 6.保存数据
//         lyricObj[time] = text
//     })
//     return lyricObj
// }

function _formatLyr(lyricStr) {
    // 可以看network观察歌词数据是一个大字符串, 进行拆分.
    let reg = /\[.+?\]/g // 
    let timeArr = lyricStr.match(reg) // 匹配所有[]字符串以及里面的一切内容, 返回数组
    // console.log(timeArr); // ["[00:00.000]", "[00:01.000]", ......]
    let contentArr = lyricStr.split(/\[.+?\]/).slice(1) // 按照[]拆分歌词字符串, 返回一个数组(下标为0位置元素不要,后面的留下所以截取)
    // console.log(contentArr);
    let lyricObj = {} // 保存歌词的对象, key是秒, value是显示的歌词
    timeArr.forEach((item, index) => {
        // 拆分[00:00.000]这个格式字符串, 把分钟数字取出, 转换成秒
        let ms = item.split(':')[0].split('')[2] * 60
        // 拆分[00:00.000]这个格式字符串, 把十位的秒拿出来, 如果是0, 去拿下一位数字, 否则直接用2位的值
        let ss = item.split(':')[1].split('.')[0].split('')[0] === '0' ? item.split(':')[1].split('.')[0].split('')[1] : item.split(':')[1].split('.')[0]
        // 秒数作为key, 对应歌词作为value
        lyricObj[ms + Number(ss)] = contentArr[index]
    })
    // 返回得到的歌词对象(可以打印看看)
    // console.log(lyricObj);
    return lyricObj
}